Today computer-based systems can be found most everywhere and have made inroads into many devices that are used everyday, such as cell phones, handheld computers, automobiles, medical devices, personal computers and the like. In general, society has placed much reliance on computer-based systems to handle everyday tasks, such as simple tasks like balancing checkbooks to relatively complex tasks such as predicting the weather. As technology improves, more and more tasks are migrated to computer-based systems. This, in turn, causes society to become more and more reliant on these systems.
A typical computer-based system comprises a system board and optionally one or more peripheral devices, such as display units and disk units. The system board often contains one or more processors, a memory subsystem and other circuitry, such as serial device interfaces, network device controllers and hard disk controllers.
The type of processors employed on a particular system board usually depends on the type of tasks performed by the system. For example, a system that performs a limited set of tasks, such as monitoring emissions generated by an automobile engine and adjusting an air/fuel mixture to ensure the engine is burning fuel completely, may employ a simple specialized processor that is tailored to performing these tasks. On the other hand, a system that performs many different tasks, such as managing many users and running many different applications, may employ one or more complex processors that are general purpose in nature, configured to perform high-speed calculations and manipulate data to minimize the response time to servicing the users' requests.
The memory subsystem is storage that holds information (e.g., instructions, data values) used by the processors. The memory subsystem typically comprises controller circuitry and one or more memory devices. The controller circuitry is usually configured to interface the memory devices with the processors and enable the processors to store and retrieve information to and from the memory devices. The memory devices hold the actual information.
Like the processors, the type of devices employed in a memory subsystem is often driven by the type of tasks performed by the computer system. For example, a computer system may have the task of having to boot without the assistance of a disk drive and execute a set of software routines that do not change often. Here, the memory subsystem may employ non-volatile devices, such as flash memory devices, to store the software routines. Other computer systems may execute very complex tasks that require a large high-speed data store to hold large portions of information. Here, the memory subsystem may employ high-speed high-density Dynamic Random Access Memory (DRAM) devices to store the information.
Demand for flash memory devices has continued to grow significantly because these devices are well suited in various embedded applications that require non-volatile storage. For example, flash is widely used in various consumer devices, such as digital cameras, cell phones, USB flash drives and portable music players, to store data used by these devices. Market demand for flash memory has led to tremendous improvements in flash memory technology over the past several years both in terms of speed and density. These improvements have led to the prediction that flash memory-based devices may one day replace hard disk drives in applications that continue to use disk drives for mass storage.
Some flash devices employ serial interfaces such as, for example, multiple flash devices, which are used to perform operations, such as read, write and erase operations, on memory contained in the devices. These operations are typically selected on a device using command strings that are serially fed to the devices. The command strings typically contain a command that represents the operation to be selected, as well as other parameters. For example, a write operation may be selected by serially feeding an information string to the device that contains a write command, the data to be written and an address in the memory where the data is to be written.
The command string may be fed to all of the devices even though the command may only be performed on one of the devices. To select the device on which the command is to be performed, the command string may contain a device identifier (ID) that identifies the flash device to which the command is directed. Each device receiving the command string compares the device ID contained in the command string to an ID associated with the device. If the two match, the device assumes that the command is directed to the device and performs the command.
A problem with the above-described arrangement involves establishing a device ID for each device. One technique that may be used to establish a device ID for a device is to hardwire an internal unique device ID into the device. A drawback with this approach, however, is that if large volumes of devices are produced, the size of the device ID may have to be quite large in order to ensure that each device contains a unique device ID. Managing a large-sized device ID may add significant complexity to the device, which in turn may increase the cost of producing the device. In addition, reclaiming device IDs that are associated with devices that are no longer in use may further add to the complexity of this scheme.
Another approach to assigning device IDs to devices involves externally hardwiring a device ID for each device. Here, the device ID may be specified by wiring various pins on the device to certain states to establish a device ID for the device. The device reads the wired state of the pins and establishes its ID from the read state. One drawback with this approach, however, is that external wiring is needed to assign the device ID for each device. This may add to the complexity of, e.g., printed circuit boards (PCBs) that hold the memory devices. Another drawback with this approach is that it may require pins to be dedicated for the assignment of the device ID. This may consume precious resources that may be otherwise better used. In addition, dedicating pins for the assignment of the device ID may require a greater footprint for the device than if pins were not used to assign the device ID.
One of the solutions proposed to address the aforementioned limitations of prior art techniques is to automatically establish a device identifier (ID) for a device, for example, in a serial interconnection configuration, in a manner that does not require special internal or external hardwiring of the device ID. Such a technique is taught in related U.S. patent application Ser. No. 11/521,734 filed Sep. 15, 2006, the teachings of which are incorporated herein by reference in their entirety. Briefly, the technique enables the role of Input Port Enable (IPE) signal to change based on the device configuration of single chip, multi-drop, or serial interconnection. The serial input (SI) and serial output (SO) functions can send and receive all data types without timing restriction during relevant operations. There is also no need for additional pin or pin function change from the main pin definition. This ID generation and assignment technique depends on the number of available pins, which are determined by the number of link ports. Therefore, for example, in multi-independent serial link (MISL), for single port, the maximum number of devices supported is eight devices. In the case of dual ports, the maximum number of devices is 64 (i.e., three pins for one port).